import weixin
import mdb_connect
from apscheduler.schedulers.blocking import BlockingScheduler

def select_data(pathfile):
    # todo 连接数据库
    conn = mdb_connect.mdb_conn(pathfile)
    cur = conn.cursor()
    # todo 查询数据库内已预先写好的查询报表
    sql = "SELECT DISTINCT * FROM  last"
    data = mdb_connect.mdb_sel(cur, sql)

    # todo 计算各个急停点在之前时间段（默认20分钟）内的按下次数
    number = {}
    for point in mdb_connect.W10:
        n = 0
        for i in data:
            if point in i[3] and '按下' in i[2]:
                n += 1
            else:
                continue
        number.setdefault(point,n)
    print(number)

    # todo 计算各个急停点在之前时间段（默认20分钟）内的影响时间
    time = {}
    new_data = {}
    # 获得每个急停点的清单
    for point,num in number.items():
        temp = []
        for d in data:
            if point in d[3]:
                temp.append(d)
        new_data.setdefault(point,temp)
    print(new_data)
    # 获得每个急停的时间
    for point in new_data.keys():
        if new_data[point]:
            total = mdb_connect.gettime(new_data[point])
            time.setdefault(point,total)
    print(time)

    # todo 对按下次数进行排序，得出最多的前三位
    top3 = []
    for k in sorted(number, key=number.__getitem__,reverse=True):
        top3.append([k,number[k]])

    # todo 对急停影响时间进行排序，得出最多的前三位
    pass

    # todo 连接微信，针对前三位进行通报
    message = '在过去20分钟，急停按下次数前三位的分别是：\n{0}:\n按下{1}次,影响时间合计{2}秒\n{3}：\n按下{4}次,影响时间合计{5}秒\n{6}：\n按下{7}次，影响时间合计{8}秒'.\
        format(top3[0][0],top3[0][1],time[top3[0][0]],top3[1][0],top3[1][1],time[top3[1][0]],top3[2][0],top3[2][1],time[top3[2][0]])
    weixin.sendweixin(message)

if __name__ == '__main__':
    scheduler = BlockingScheduler()
    path = r'C:\Users\hyq\Desktop\Alarm.mdb'
    #scheduler.add_job(select_data, 'interval', minutes=1, args=[path])
    scheduler.add_job(select_data, 'interval', seconds=2, args=[path])
    scheduler.start()
